﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using TISModel;
using BTO;
using DAL;
using Exceptions;

namespace BLL
{
    public class BLLTipoTransporte
    {
        public List<BTO.TipoTransporte> list()
        {
            DALTipoTransporte tipoTransportes = new DALTipoTransporte();
            return tipoTransportes.list();
        }

        public BTO.TipoTransporte getByID(int id)
        {
            DALTipoTransporte dalTipoTransporte = new DALTipoTransporte();
            BTO.TipoTransporte btoTipoTransporte = dalTipoTransporte.getByID(id);

            if (btoTipoTransporte == null) {
                throw new NotFoundTipoTransporteException("Tipo de transporte não encontrado!");
            }

            return btoTipoTransporte;

       }

        public BTO.TipoTransporte getByDescricao(String descricao)
        {
            DALTipoTransporte dalTipoTransporte = new DALTipoTransporte();

            BTO.TipoTransporte btoTipoTransporte = dalTipoTransporte.getByDescricao(descricao);
            if (btoTipoTransporte == null)
            {
                throw new NotFoundTipoTransporteException("Tipo de transporte com esta descrição não encontrado!");
            }

            return btoTipoTransporte;

        }

       public void insert(BTO.TipoTransporte toInsert)
       {
            DALTipoTransporte dalTipoTransporte = new DALTipoTransporte();

            BTO.TipoTransporte btoTipoTransporte = dalTipoTransporte.getByDescricao(toInsert.descricao);
            if (btoTipoTransporte != null)
            {
                throw new DescricaoTipoTransporteException("Já existe um tipo de transporte com esta decrição!");
            }

            try
            {
                dalTipoTransporte.insert(toInsert);
            }
            catch (Exception e) {
                throw new InsertTipoTransporteException(e.Message);
            }
       }

        public void update(BTO.TipoTransporte toUpdate)
        {
            DALTipoTransporte dalTipoTransporte = new DALTipoTransporte();

            try
            {
                dalTipoTransporte.update(toUpdate);
            }
            catch (Exception e) {
                throw new UpdateTipoTransporteException(e.Message);
            }
        }

        public void delete(int id)
        {
            DALTipoTransporte dalTipoTransporte = new DALTipoTransporte();
            DALTransporte dalTransporte = new DALTransporte();

            List<BTO.Transporte> listTransporte = dalTransporte.getByTipoTransporte(id);
            if (listTransporte.Count() > 0)
            {
                throw new TransportesAssociadosTipoException("Existem transportes associados à este tipo!");
            }
            try
            {
                dalTipoTransporte.delete(id);
            }
            catch (Exception e) {
                throw new DeleteTipoTransporteException(e.Message);
            }
        }
    }
}
